package com.sptus.web.util;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Objects;

public class TimeUtils {

    private static final DateTimeFormatter FORMATTER = 
        DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    /**
     * 字符串版本：获取十分钟前的时间
     * @param datetimeStr 原始时间字符串（格式：yyyy-MM-dd HH:mm:ss）
     * @return 十分钟前的时间字符串
     * @throws DateTimeParseException 格式错误时抛出
     * @throws NullPointerException 参数为null时抛出
     */
    public static String getTenMinutesBefore(String datetimeStr) {
        Objects.requireNonNull(datetimeStr, "时间字符串不能为空");
        
        LocalDateTime datetime = parseDateTime(datetimeStr);
        LocalDateTime result = datetime.minusMinutes(10);
        return FORMATTER.format(result);
    }

    /**
     * 对象版本：获取十分钟前的时间
     * @param datetime 原始时间对象
     * @return 十分钟前的LocalDateTime对象
     */
    public static LocalDateTime getTenMinutesBefore(LocalDateTime datetime) {
        Objects.requireNonNull(datetime, "时间对象不能为空");
        return datetime.minusMinutes(10);
    }

    // 解析时间字符串（带明确错误提示）
    private static LocalDateTime parseDateTime(String str) {
        try {
            return LocalDateTime.parse(str, FORMATTER);
        } catch (DateTimeParseException e) {
            throw new DateTimeParseException(
                "时间格式错误，请使用 yyyy-MM-dd HH:mm:ss 格式",
                str,
                e.getErrorIndex()
            );
        }
    }

    /**
     * 带时区版本：获取十分钟前的时间（ZonedDateTime版本）
     * @param zonedDateTime 带时区的时间对象
     * @return 十分钟前的ZonedDateTime对象
     */
    public static java.time.ZonedDateTime getTenMinutesBefore(
        java.time.ZonedDateTime zonedDateTime) {
        Objects.requireNonNull(zonedDateTime, "时间对象不能为空");
        return zonedDateTime.minusMinutes(10);
    }
}